package gerenciadorescola.model;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

public class Escola implements Serializable{

    private Integer contTurmas;
    private Integer contAlunos;
    private Integer contProfessores;
    private Integer contDiretor;
    private Integer contDisciplinas;
    private static Escola escola;

    private Escola() {
        contTurmas = 0;
        contAlunos = 0;
        contProfessores = 0;
        contDiretor = 0;
        contDisciplinas = 0;
    }

    public void salvar() {
        try {
            FileOutputStream out;
            out = new FileOutputStream("escola.dat", false);
            ObjectOutputStream o = new ObjectOutputStream(out);
            o.writeObject(escola);
            o.flush();
            o.close();
        } catch (Exception e) {
            System.out.println("Erro ao salvar Escola!");
        }
    }

    public static Escola getInstance() {
        if (escola == null) {
            escola = new Escola();
        }
        return escola;
    }

    public static void setEscola(Escola arqEscola) {
        escola = arqEscola;
    }

    public Map<Integer, Turma> getTurmas() {
        Map<Integer, Turma> turmas = null;
        try {
            turmas = new HashMap();
            FileInputStream in;
            in = new FileInputStream("turmas.dat");
            ObjectInputStream o = new ObjectInputStream(in);
            turmas = (HashMap) o.readObject();
            o.close();
        } catch (Exception exc) {
            System.out.println("Erro na Escola!\n Falha ao carregar Turmas!");
        }
        return turmas;
    }

    public void setTurmas(Map<Integer, Turma> turmas) {
        try {
            FileOutputStream out;
            out = new FileOutputStream("turmas.dat", false);
            ObjectOutputStream o = new ObjectOutputStream(out);
            o.writeObject(turmas);
            o.flush();
            o.close();
        } catch (Exception e) {
            System.out.println("Erro no Escola!\n Falha ao salvar Turmas!");
        }
    }
    
    public Map<Integer, Diretor> getDiretor() {
        Map<Integer, Diretor> diretores = null;
        try {
            diretores = new HashMap();
            FileInputStream in;
            in = new FileInputStream("diretor.dat");
            ObjectInputStream o = new ObjectInputStream(in);
            diretores = (HashMap) o.readObject();
            o.close();
        } catch (Exception exc) {
            System.out.println("Erro na Escola!\n Falha ao carregar Diretor!");
        }
        return diretores;
    }

    public void setDiretor(Map<Integer, Diretor> diretores) {
        try {
            FileOutputStream out;
            out = new FileOutputStream("diretor.dat", false);
            ObjectOutputStream o = new ObjectOutputStream(out);
            o.writeObject(diretores);
            o.flush();
            o.close();
        } catch (Exception e) {
            System.out.println("Erro no Escola!\n Falha ao salvar Diretor!");
        }
    }

    public Integer getContAlunos() {
        return contAlunos;
    }

    public void setContAlunos(Integer contAlunos) {
        this.contAlunos = contAlunos;
    }

    public Integer getContDisciplinas() {
        return contDisciplinas;
    }

    public void setContDisciplinas(Integer contDisciplinas) {
        this.contDisciplinas = contDisciplinas;
    }

    public Integer getContProfessores() {
        return contProfessores;
    }

    public void setContProfessores(Integer contProfessores) {
        this.contProfessores = contProfessores;
    }

    public Integer getContDiretor() {
        return contDiretor;
    }

    public void setContDiretor(Integer contDiretor) {
        this.contDiretor = contDiretor;
    }

    public Integer getContTurmas() {
        return contTurmas;
    }

    public void setContTurmas(Integer contTurmas) {
        this.contTurmas = contTurmas;
    }
}
